﻿using System.Collections.Generic;
using System.Reflection;
using Comandos.Fabricas;
using LogicaNegocio.Controladores.Contratos;
using ObjetosComunes.Entidades;
using ObjetosComunes.Logger;
using ObjetosComunes.Recursos;

namespace LogicaNegocio.Controladores.Implementacion
{
    /// <summary> Clase que implementa la fachada de la logica </summary>
    public class Logica : ILogica
    {
        /// <summary> Metodo que obtiene la lista de ciudades almacenadas </summary>
        /// <returns>Lista de ciudades</returns>
        public List<Ciudad> ObtenerCiudades()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion

            var comando = FabricaComandosCiudad.ObtenerComandoObtenerTodos();
            var retorno = comando.Ejecutar();

            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la lista de estados de una ciudad </summary>
        /// <param name="ciudad">Ciudad a consultar los estados</param>
        /// <returns>Lista de estados</returns>
        public List<Estado> ObtenerEstados(Ciudad ciudad)
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion

            var comando = FabricaComandosEstado.ObtenerComandoConsultar(ciudad);
            var retorno = comando.Ejecutar();

            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene al lista de ramos almacenados </summary>
        /// <returns>Lista de ramos</returns>
        public List<Ramo> ObtenerRamos()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion

            var comando = FabricaComandosRamo.ObtenerComandoObtenerTodos();
            var retorno = comando.Ejecutar();

            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }


        /// <summary> Metodo que obtiene la lista de los tipos de siniestro almacenados </summary>
        /// <returns></returns>
        public List<TipoSiniestro> ObtenerTipoSiniestro()
        {
            #region Instrumentacion Entrada
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.EntrandoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion

            var comando = FabricaComandosTipoSiniestro.ObtenerComandoObtenerTodos();
            var retorno = comando.Ejecutar();

            #region Instrumentacion Salida
            if (Log.InfoHabilitado)
                Log.Info(string.Format(Recurso.SaliendoMetodo, MethodBase.GetCurrentMethod().Name));
            #endregion
            return retorno;
        }
    }
}
